

//1.同步与异步
//2 get||post
//  同步的get，同步的post，异步的get，异步的post
//  get通过url地址传值
//  post 通过 FORM表单体传值

//1.创建ajax的核心对象

function createXHR() {
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    }
    return new ActiveXObject("Msxml2.XMLHTTP");
}
//2.定义ajax函数
//type  method  get/post
//success  fn
// json={
//       url:"",              请求的地址
//       type:"get/post",     请求的方式,get ?uname=zhangsan&upwd=123 |post
//       success:function(){},成功的回调函数
//       dataType:"xml json text" 返回的数据类型
//       async:"true/fase"     异步与同步
//       data: {uname:zhangsan,upwd:123} 往服务器传递的参数
// }
function ajax(json) {
    json.type ? json.type : json.type = "get";//设置默认参数
    json.dataType ? json.dataType : json.dataType = "json";//默认就是JSON
    //如果没有给参数
    json.async = json.async + "";
    if (json.async == "" || json.async == "undefined") {
        json.async = true;
    }
    //创建核心对象
    var xhr = createXHR();
    if (json.type.toLowerCase() == "get".toLowerCase()) {
        xhr.open("get", json.url + "?" + toData(json.data), json.async);
        xhr.send(null);
    } else {
        xhr.open("post", json.url, json.async);
        //如果是post请求，必须加上这样的一句话，在请求头，模拟表单的格式。
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        xhr.send(toData(json.data));
        console.log("post");
    }
    //同步与异步的操作是不一样
    if (json.async == true) {
        //异步
        xhr.onreadystatechange = function () {
            //完成返回结果的接受
            if (xhr.readyState == 4) {
                myResult(xhr, json);
                //与服务器的交互是正常
            }
        }
    } else {
        myResult(xhr, json);
    }
}
//转换参数  toData( {uname:zhangsan,upwd:123} )  返回 uname=zhangsan&&upwd=123&
function toData(obj) {
    var str = "";
    for (var key in obj) {
        str += key + "=" + obj[key] + "&";
    }
    return str;
}

function myResult(xhr, json) {

    if (xhr.status == 200) {

        var result;
        //判断返回的数据类型是json还是其他
        if (json.dataType.toLowerCase() == "text".toLowerCase()) {
            result = xhr.responseText;
        } else if (json.dataType.toLowerCase() == "xml".toLowerCase()) {
            result = xhr.responseXML;
        } else {
            //默认就是返回JSON
            result = JSON.parse(xhr.responseText);
        }

        //不是undefined，说明你传来了一个回调函数
        if (json.success) {
            json.success(result);
        }

    }

}



